import request from '@/utils/request'

/**
 * 患者相关API接口
 * 对应后端 PatientController 的所有接口
 */

// ==================== 患者信息查询 ====================

/**
 * 获取当前登录患者信息
 */
export function getPatientInfo() {
  return request({
    url: '/patient/patient/info',
    method: 'get'
  })
}

/**
 * 根据患者ID查询患者信息
 * @param {number} patientId 患者ID
 */
export function getPatientById(patientId) {
  return request({
    url: `/patient/patient/getPatientInfo/${patientId}`,
    method: 'get'
  })
}

/**
 * 根据患者名称查询患者信息（内部调用）
 * @param {string} username 患者名称
 */
export function getPatientByName(username) {
  return request({
    url: `/patient/patient/infoByUserName/${username}`,
    method: 'get'
  })
}

/**
 * 根据手机号获取患者信息
 * @param {string} phone 手机号
 */
export function getPatientByPhone(phone) {
  return request({
    url: `/patient/patient/getPatientByPhone/${phone}`,
    method: 'get'
  })
}

/**
 * 微信登录获取患者信息（内部调用）
 * @param {string} code 微信openid
 */
export function getPatientByWxCode(code) {
  return request({
    url: `/patient/patient/wxLogin/${code}`,
    method: 'get'
  })
}

// ==================== 患者列表查询 ====================

/**
 * 分页查询患者列表
 * @param {object} params 查询参数
 * @param {number} params.pageNum 页码
 * @param {number} params.pageSize 每页数量
 * @param {string} params.patientName 患者姓名（可选）
 * @param {string} params.phone 手机号（可选）
 */
export function getPatientList(params) {
  return request({
    url: '/patient/patient/list',
    method: 'post',
    data: params
  })
}

/**
 * 批量查询患者信息
 * @param {Array} ids 患者ID数组
 */
export function batchGetPatients(ids) {
  const idsParam = Array.isArray(ids) ? ids.join('|') : String(ids)
  return request({
    url: '/patient/patient/batchSimple',
    method: 'get',
    params: { ids: idsParam }
  })
}

// ==================== 患者注册管理 ====================

/**
 * 通过手机号添加患者
 * @param {string} phone 手机号
 */
export function addPatientByPhone(phone) {
  return request({
    url: '/patient/patient/addPatientByPhone',
    method: 'post',
    params: { phone }
  })
}

// ==================== 密码管理 ====================

/**
 * 修改患者密码（已知旧密码）
 * @param {object} data 密码修改数据
 * @param {number} data.id 患者ID
 * @param {string} data.oldPassword 旧密码
 * @param {string} data.newPassword 新密码
 */
export function updatePassword(data) {
  return request({
    url: '/patient/patient/updatePassword',
    method: 'put',
    data: data
  })
}

/**
 * 忘记密码 - 重置密码（通过手机号验证码）
 * @param {object} data 重置密码数据
 * @param {string} data.phone 手机号
 * @param {string} data.verifyCode 验证码
 * @param {string} data.newPassword 新密码
 */
export function resetPassword(data) {
  return request({
    url: '/patient/patient/resetPassword',
    method: 'post',
    data: data
  })
}

// ==================== H币管理 ====================

/**
 * 扣减H币
 * @param {object} data 扣减数据
 * @param {number} data.patientId 患者ID
 * @param {number} data.amount 扣减金额
 */
export function deductHcoin(data) {
  return request({
    url: '/patient/patient/deductHcoin',
    method: 'post',
    data: data
  })
}

/**
 * 查询当前登录患者的H币余额
 */
export function getMyHcoin() {
  return request({
    url: '/patient/patient/myHcoin',
    method: 'get'
  })
}

/**
 * 充值H币
 * @param {number} amount 充值金额
 * @param {number} [type] 充值类型/渠道 可选
 */
export function rechargeHcoin(amount, type, requestId) {
  return request({
    url: '/patient/patient/recharge',
    method: 'post',
    params: { amount, type, requestId }
  })
}

/**
 * 提现H币
 * @param {number} amount 提现金额
 */
export function withdrawHcoin(amount, requestId) {
  return request({
    url: '/patient/patient/withdraw',
    method: 'post',
    params: { amount, requestId }
  })
}

/**
 * 我的充值/提现记录
 */
export function getMyRechargeRecords({ pageNum = 1, pageSize = 10 } = {}) {
  return request({
    url: '/patient/rechargeRecord/my',
    method: 'get',
    params: { pageNum, pageSize }
  })
}

/**
 * 删除一条充值/提现记录
 * @param {number} id 记录ID
 */
export function deleteRechargeRecord(id) {
  return request({
    url: `/patient/rechargeRecord/delete/${id}`,
    method: 'get'
  })
}

// ==================== 患者信息更新 ====================

/**
 * 更新患者基本信息
 * @param {object} data 患者信息
 */
export function updatePatientInfo(data) {
  return request({
    url: '/patient/patient/update',
    method: 'put',
    data: data
  })
}

/**
 * 上传患者头像
 * @param {File} file 头像文件
 */
export function uploadAvatar(file) {
  const formData = new FormData()
  formData.append('file', file)
  
  return request({
    url: '/patient/patient/avatar',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

// ==================== 患者关注功能 ====================

/**
 * 关注医生
 * @param {number} doctorId 医生ID
 */
export function followDoctor(doctorId) {
  return request({
    url: '/patient/patient/follow',
    method: 'post',
    data: { doctorId }
  })
}

/**
 * 取消关注医生
 * @param {number} doctorId 医生ID
 */
export function unfollowDoctor(doctorId) {
  return request({
    url: '/patient/patient/unfollow',
    method: 'post',
    data: { doctorId }
  })
}

/**
 * 获取关注的医生列表
 */
export function getFollowedDoctors() {
  return request({
    url: '/patient/patient/followed-doctors',
    method: 'get'
  })
}

// ==================== 患者收藏功能 ====================

/**
 * 收藏帖子
 * @param {number} postId 帖子ID
 */
export function favoritePost(postId) {
  return request({
    url: '/patient/patient/favorite',
    method: 'post',
    data: { postId }
  })
}

/**
 * 取消收藏帖子
 * @param {number} postId 帖子ID
 */
export function unfavoritePost(postId) {
  return request({
    url: '/patient/patient/unfavorite',
    method: 'post',
    data: { postId }
  })
}

/**
 * 获取收藏的帖子列表
 */
export function getFavoritePosts() {
  return request({
    url: '/patient/patient/favorite-posts',
    method: 'get'
  })
}
